<<<предыдущая глава к содержанию следующая глава >>>

6. Операции над полиномами

Рассмотрим полином вида Pn(x)=p1xn+p2xn-1+...+pnx+an+1. Соответственно будем обозначать Р - n+1-мерный вектор коэффициентов, Х - массив значений аргумента.

При вычислении значений полинома для элементов массива можно использовать функцию polyval(P,X):
>>polyval([1 2 5],[0 3 1])
ans =
5 20 8
>> polyval([1 2 5],[0 3 1; 1 1 1])
ans = 5 20 8
8 8 8

С помощью функции polyvalm(P,X) можно вычислять значения матричного полинома для квадратной матрицы Х :
>> polyvalm([1 2 5],[0 3 1; 1 1 1; 0 0 2])
ans = 8 9 7
3 11 6
0 0 13

Умножение полиномов Сm+n(x)=Pm(x) x Qn(x) выполняется командой C=conv(P,Q) -

Деление полиномов можно реализовать командой [C,R]=deconv(A,B) , где С -частное и R - остаток от деления А на В.
>> conv([1 2 3],[5 6])
ans =
5 16 27 18
[c,r]=deconv([1 2 3],[5 6])
c = 0.2000 0.1600
r = 0 0 2.0400

Вычисление производных от полинома, произведения и отношения полиномов производится соответственно командами dp=polyder(P), dc=polyder(A,B) и [f,g]=polyder(A,B):
polyder([1 -2 3 4 5])
ans =
4 -6 6 4
>> polyder([1 2 3],[5 6])
ans =
15 32 27
>> [f,g]=polyder([1 2 3],[5 6])
f = 5 12 -3
g =25 60 36

Вычисление корней полинома реализуется функцией roots(P), а построение полинома по его корням - функцией poly(R).
>> r=roots([1 3 5 7])
r = -2.1795
-0.4102 + 1.7445 i
-0.4102 - 1.7445 i
>>poly(r)
ans =
1.0000 3.0000 5.0000 7.0000

Функция poly(А) обеспечивает построение характеристического полинома |lE-A|=0 (см. проблему собственных значений):
>> A= magic(3)
A = 8 1 6
3 5 7
4 9 2
>>P=poly(A)
P =
1.0e+002 *
0.0100 -0.1500 -0.2400 3.6000

В приложениях, особенно связанных с преобразованием Лапласа при решении дифференциальных уравнений, оперируют с отношениями полиномов и представлениями их в виде простых дробей:

,

где sk - простые корни полинома Qn(s); если некоторый корень sj имеет кратность m, то соответствующее слагаемое представляется в виде,

Команда [r,s,f] =residue(P,Q) дает разложение отношения полиномов на простые дроби (в случае близких корней возможна значительная погрешность). В случае кратного корня пользуются функцией rj=resi2(P,Q,sj,m,j), где j -номер вычисляемого коэффициента (по умолчанию j=m); по умолчанию m=1 (простой корень).

Команда [P,Q] =residue(r,s,f) выполняет обратное действие свертки разложения в отношение полиномов.

Выполнив действия
[r,s,f]=residue([1 -6 11 -6],[1 -5 4 0])
r = 0.5000 0 -1.5000
s = 4 1 0
f = 1
>> [A,B]=residue([0.5 0 -1.5],[4 1 0],[1])
A = 1 -6 11 -6
B = 1 -5 4 0

видим, что

В случае кратного корня
>>P=poly([1 2 3 ])
P = 1 -6 11 -6
>> Q=poly([0 0 0 6])
Q = 1 -6 0 0 0
>> [r,s,f]=residue(P,Q)
r = 0.2778 0.7222 -1.6667 1.0000
s = 6 0 0 0
f = []
>>r1=resi2(P,Q,0,3,1)
r1 = 0.7222
>>r2=resi2(P,Q,0,3,2)
r2 = -1.6667
>>r3=resi2(P,Q,0,3,3)
r3 = 1

видим разложение:


<<<предыдущая глава к содержанию следующая глава >>>